package com.wfs.lucene;

import org.apache.lucene.document.Document;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.*;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;

import java.io.File;
import java.io.IOException;

public class SearchIndexTest {

    public static void main(String[] args) throws IOException {
        String parent= System.getProperty("user.dir")+ File.separator+"src"+File.separator+"main"+File.separator+
                "resources"+  File.separator+"lucene"+  File.separator;
        // 索引存储位置
        String indexDir = parent+ "index";
        Directory directory = FSDirectory.open(new File(indexDir).toPath());
        IndexReader reader = DirectoryReader.open(directory);
        // 搜索对象， 内部主要依赖reader打开索引，读取索引，执行查询逻辑。
        IndexSearcher searcher = new IndexSearcher(reader);
        // Term 条件
        Term t = new Term("contents", "brings");
        // Query：查询条件封装对象，咱们使用的是 TermQuery，TermQuery 即：查询指定域内包含指定“词”的文档
        Query query = new TermQuery(t);
        TopDocs topDocs = searcher.search(query, 10);
        // ScoreDoc：封装文档id，注意这个id是 Lucene 领域内的id；评分
        for(ScoreDoc doc : topDocs.scoreDocs) {
            // 通过查询门户 searcher.doc 方法 根据，文档id，提取出文档。
            Document document = searcher.doc(doc.doc);
            // 打印contents域包含“released”的文档名称
            System.out.println(document.get("fileName"));
        }

        reader.close();
        directory.close();
    }
}
